﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using PMServiceDesk.DataAccess;
using PMServiceDesk.DataType;
using PMServiceDesk.Parameters.Constantes;
using PMServiceDesk.Utils.ManejoDatos;

namespace PMServiceDesk.BusinessLogic
{
    public static class SoporteLogic
    {
        public static List<KeyValuePair<string, string>> ProyectosPorUsuario(string usuario)
        {
            return SoporteData.ProyectosPorUsuario(usuario);
        }

        public static List<KeyValuePair<string, string>> EstadosPorTabla(string tablaId, string habilitado = null)
        {
            return SoporteData.EstadosPorTabla(tablaId, habilitado);
        }

        public static List<KeyValuePair<string, string>> ParametrosPorDominio(string dominioId, string habilitado = null)
        {
            return SoporteData.ParametrosPorDominio(dominioId, habilitado);
        }

        public static List<KeyValuePair<string, string>> ParametrosAbreviaturaPorDominio(string dominioId, string habilitado = null)
        {
            return SoporteData.ParametrosAbreviaturaPorDominio(dominioId, habilitado);
        }

        public static List<KeyValuePair<string, string>> JefesProyecto()
        {
            return SoporteData.JefesProyecto(Parametros.Rol_JefeProyecto, Estados.Recurso_Vigente, true);
        }

        public static List<KeyValuePair<string, string>> JefesProyectoPorProyecto(string proyectoId)
        {
            return SoporteData.JefesProyectoPorProyecto(proyectoId, Parametros.Rol_JefeProyecto, Estados.Recurso_Vigente, true);
        }

        public static List<KeyValuePair<string, string>> UsuariosPorProyecto(string proyectoId)
        {
            return SoporteData.UsuariosPorProyecto(proyectoId, Estados.Recurso_Vigente, true);
        }

        public static List<KeyValuePair<string, string>> UsuariosPorProyecto_SinAsignar(string proyectoId)
        {
            List<KeyValuePair<string, string>> usuarios = SoporteData.UsuariosPorProyecto(proyectoId, Estados.Recurso_Vigente, true);
            usuarios.Insert(0, new KeyValuePair<string, string>("0", "[Sin asignar]"));

            return usuarios;
        }

        public static List<KeyValuePair<string, string>> CalendariosPorProyecto(string proyectoId, string habilitado = null)
        {
            return SoporteData.CalendariosPorProyecto(proyectoId, habilitado);
        }

        public static List<KeyValuePair<string, string>> TiposPaqueteTrabajo(string proyectoId)
        {
            return SoporteData.TiposPaqueteTrabajo(proyectoId, "1");
        }
        public static List<KeyValuePair<string, string>> EstadosPaqueteTrabajo(string tipoPaqueteTrabajoId)
        {
            return SoporteData.EstadosPaqueteTrabajo(tipoPaqueteTrabajoId, "1");
        }
        public static List<KeyValuePair<string, string>> EstadosPaqueteTrabajoPorEstado(string estadoPaqueteTrabajoId)
        {
            EstadoPaqueteTrabajoType estado = new EstadoPaqueteTrabajoLogic().CargarPorId(estadoPaqueteTrabajoId);

            return SoporteData.EstadosPaqueteTrabajo(estado.TipoPaqueteTrabajoId, "1");
        }
        public static List<KeyValuePair<string, string>> EstadosPorPaqueteTrabajo(string paqueteTrabajoId)
        {
            PaqueteTrabajoType p = new PaqueteTrabajoLogic().CargarPorId(paqueteTrabajoId);

            return SoporteData.EstadosPaqueteTrabajo(p.TipoPaqueteTrabajoId, "1");
        }
        public static List<KeyValuePair<string, string>> EstadosPaqueteTrabajoPorProyecto(string proyectoId)
        {
            return SoporteData.EstadosPaqueteTrabajoPorProyecto(proyectoId);
        }

        public static List<KeyValuePair<string, string>> RecursosPorProyecto(string proyectoId)
        {
            return SoporteData.RecursosPorProyecto(proyectoId);
        }

        public static List<KeyValuePair<string, string>> TipoBusquedaFechasProyecto()
        {
            List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
            list.Add(new KeyValuePair<string,string>(TipoBusqueda.Proyecto_FechaInicioEstimado ,"Inicio Proyectado"));
            list.Add(new KeyValuePair<string, string>(TipoBusqueda.Proyecto_FechaFinEstimado, "Fin Proyectado"));
            list.Add(new KeyValuePair<string, string>(TipoBusqueda.Proyecto_FechaInicioReal, "Inicio Real"));
            list.Add(new KeyValuePair<string, string>(TipoBusqueda.Proyecto_FechaFinReal, "Fin Real"));

            return list;
        }

        public static int RegistrarTransicionDocumentos(string documentoTransicionEstadoId, string documentoPaqueteTrabajoId)
        {
            return SoporteData.RegistrarTransicionDocumentos(documentoTransicionEstadoId, documentoPaqueteTrabajoId);
        }

        public static List<KeyValuePair<string, string>> TransicionEstados(string rolId, string estadoPaqueteTrabajoId)
        {
            return SoporteData.TransicionEstados(rolId, estadoPaqueteTrabajoId, Parametros.Permiso_Editar, true);
        }

        public static List<KeyValuePair<string, string>> TransicionUsuarios(string usuarioAsignadoId,string estadoPaqueteTrabajoId)
        {
            return SoporteData.TransicionUsuarios(usuarioAsignadoId,estadoPaqueteTrabajoId, Parametros.Permiso_Editar, true);
        }

        public static string PermisoPorPaqueteTrabajo(string usuarioId, string paqueteTrabajoId)
        {
            return SoporteData.PermisoPorPaqueteTrabajo(usuarioId, paqueteTrabajoId);
        }

        public static string PorcentajeAvancePaqueteTrabajo(string paqueteTrabajoId)
        {
            decimal porcentajeAvance = SoporteData.PorcentajeAvancePaqueteTrabajo(paqueteTrabajoId);

            return ConvertFormat.Decimal_To_Char(porcentajeAvance) + " %";
        }
    }
}
